import Vue from 'vue'
import Vuex from 'vuex'
import { themes } from '../utils/theme'
import listsModule from './modules/lists'
import tasksModule from './modules/tasks'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    // 初始状态
    currentTheme: 'light', // 默认使用浅色主题
    themeColors: themes.light,
    drawerVisible: false // 抽屉可见性状态
  },
  mutations: {
    // 状态修改方法
    SET_THEME(state, themeName) {
      state.currentTheme = themeName;
      state.themeColors = themes[themeName];
      // 保存主题设置到本地存储
      uni.setStorageSync('theme', themeName);
      
      // 仅在H5环境下直接操作DOM
      // #ifdef H5
      setTimeout(() => {
        try {
          const colors = state.themeColors;
          // 设置CSS变量
          document.documentElement.style.setProperty('--primary-color', colors.primary);
          document.documentElement.style.setProperty('--background-color', colors.background);
          document.documentElement.style.setProperty('--text-color', colors.text);
          
          // 修改页面背景色
          document.body.style.backgroundColor = colors.background;
          document.body.style.color = colors.text;
        } catch (error) {
          console.error('设置主题样式失败:', error);
        }
      }, 0);
      // #endif
      
      // 触发全局事件，通知应用主题已更改
      uni.$emit('themeChange', { theme: themeName, colors: state.themeColors });
    },
    
    // 设置抽屉可见性
    SET_DRAWER_VISIBLE(state, visible) {
      state.drawerVisible = visible;
    }
  },
  actions: {
    // 异步操作
    initTheme({ commit }) {
      // 从本地存储获取主题设置
      const savedTheme = uni.getStorageSync('theme');
      if (savedTheme && themes[savedTheme]) {
        commit('SET_THEME', savedTheme);
      }
    },
    toggleTheme({ commit, state }) {
      const newTheme = state.currentTheme === 'light' ? 'dark' : 'light';
      commit('SET_THEME', newTheme);
    },
    
    // 打开抽屉
    openDrawer({ commit }) {
      commit('SET_DRAWER_VISIBLE', true);
    },
    
    // 关闭抽屉
    closeDrawer({ commit }) {
      commit('SET_DRAWER_VISIBLE', false);
    },
    
    // 切换抽屉可见性
    toggleDrawer({ commit, state }) {
      commit('SET_DRAWER_VISIBLE', !state.drawerVisible);
    },
    
    // 初始化应用数据
    async initAppData({ dispatch }) {
      try {
        console.log('开始初始化应用数据');
        
        // 初始化主题
        await dispatch('initTheme');
        console.log('主题初始化完成');
        
        // 初始化清单和任务数据
        await dispatch('lists/initLists');
        console.log('清单数据初始化完成');
        
        await dispatch('tasks/initTasks');
        console.log('任务数据初始化完成');
        
        console.log('应用数据初始化完成');
      } catch (error) {
        console.error('初始化应用数据失败:', error);
      }
    }
  },
  modules: {
    // 模块化状态管理
    lists: listsModule,
    tasks: tasksModule
  }
}) 